/*
 * =====================================================================================
 *
 *       Filename:  driveragent.h
 *
 *    Description:  
 *
 *        Version:  1.0
 *        Created:  03/04/2011 01:18:59 PM
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  Ernesto
 *
 * =====================================================================================
 */

/*This guard makes sure the header file is only
  included once.*/
#ifndef DRIVER_AGENT_H_
#define DRIVER_AGENT_H_

#include <iostream>
#include <vector>
#include <string>
#include <map>
#include<list>

namespace driver{

class DriverAgent {
    public:
		DriverAgent(){};
		DriverAgent(std::string iId,double iSpeed,std::string iSourceNode,std::string iDestNode);
		~DriverAGent(){};

		/*If this is the global probability table it has to live someplace else. GWJ*/
        map<string,list<double> > roadProbs;

		//getters and setters
		/*Technically speaking, there is no problem putting the code for small functions in the header file.
		  So functions like these are fine in the header file as long as they don't get too long. Once they get 
		  bigger than one or two lines, they should be put in the source file. GWJ*/
		std::string getId() {
			return ivId;
		}
		void setId(std::string iId){
			ivId.assign(iId);
		}
		double getSpeed(){
			return ivSpeed;
		}
		void setSpeed(double iSpeed){
			ivSpeed = iSpeed;
		}
		std::string getSourceNode(){
			return ivSourceNode;
		}
		void setSourceNode(std::string iSrc){
			ivSourceNode = iSrc;
		}
		std::string getDestNode(){
			return ivDestNode;
		}
		void setDestNode(std::string iDest){
			ivDestNode = iDest;
		}
		double getReward(){
			return ivReward;
		}
		void setReward(double iReward){
			ivReward = iReward;
		}


	private:
		/*If these nodes and ids are going to be strings, then we should change the
		  signatures of some of the functions that use these variables for better performance. GWJ*/
		std::string ivId;        
		std::string ivSourceNode;
		std::string ivDestNode;

		double ivSpeed;
        double ivReward;

	

}; // class DriverAgent
} //namespace DriverAgent

#endif